//
//  FYTabBar.swift
//  Mircore
//
//  Created by apple on 16/8/8.
//  Copyright © 2016年 飞羽. All rights reserved.
//

import UIKit

//继承  NSObjectProtocol  可以使用weak  进行弱引用修饰

protocol   FYTabBarDelegate:  NSObjectProtocol {
    
    func   didSelectedComposeButton()
}

class FYTabBar: UITabBar {

    //撰写按钮的闭包
    
    var composeButtonClosure :(() -> ())?
    
    //定义代理对象
    
    weak  var fyDelegate:FYTabBarDelegate?
    
     //MARK:- 懒加载
    
    
    private  lazy  var composeButton: UIButton  = {
    
        let button = UIButton()
        
        //添加点击事件
        
        
        button.addTarget(self, action: #selector(FYTabBar.composeButtonAction), forControlEvents: .TouchUpInside)
        
        //设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        
        //设置图片
        
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        
        //指定大小
        
        button.sizeToFit()
        
        
        return button
    
    
    }()
    
    //手写代码的方式去创建对象
    
    override  init(frame: CGRect) {
        
        super.init(frame: frame)
        
        setupUI()
    }
    
    
    //加载xib / StoryBoard 会调用该方法
    
    required  init?(coder aDecoder: NSCoder) {
        
        //不支持xib / StoryBoard创建对象
        
//        fatalError("init(coder:) has  not been  implemented")
        
        //支持xib / StoryBoard写法
        
        super.init(coder: aDecoder)
        
         setupUI()
        
    }
    
    private  func   setupUI()  {
    
     addSubview(composeButton)
    }
    //MARK:-点击事件
    
    @objc  private  func  composeButtonAction () {
        
        //执行闭包  使用  ?  判断我们的闭包是否为nil  如果为nil后面的代码就不执行  直接返回nil  否则执行后面代码
        
        composeButtonClosure?()
        
        //使用代理对象调用对象方法
        
         fyDelegate?.didSelectedComposeButton()
        
    }
    
    
    //调整子控件的布局
    
    override  func  layoutSubviews() {
        
        //必须调用
        
        super.layoutSubviews()
        
        //设置中心x
        
        composeButton.centerX  = width  * 0.5
        
        //设置中心y
        
        composeButton.centerY  = height * 0.5
        
        
        //计算按钮的宽度
        
        let  itemWidth  = width / 5
        
        //记录当前遍历的系统按钮的索引
        
        var  index  = 0
        
        //遍历子控件
        
        for  value  in  subviews  {
        
        //判断是否是UITabBarButton   UITabBarButton.self 表示取到class 私有的不能直接使用
            
            if  value.isKindOfClass(NSClassFromString("UITabBarButton")!) {
            
            //设置系统按钮的宽度
                
                value.width  = itemWidth
                
                //指定系统按钮的x坐标
                
                value.x  = CGFloat(index)  * itemWidth
                
                index += 1
                
                //如果将要显示搜索按钮  当前  index += 1 多一个按钮的宽度
                
                if index  == 2 {
                    
                    index += 1
                }
            
            }
        
        }
        
    }

}




 